perm filename FREE[SS,SYS] blob
sn#328444 filedate 1978-01-17 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE FREE
C00014 ENDMK
C⊗;
TITLE FREE
A←1
B←2
C←3
D←4
E←5
R←6
S←7
T←10
TT←11
TTT←12
W←13
X←14
Y←15
Z←16
P←17
LOC 124
JRST REE
RELOC
REE: SETOM ALL#
CAIA
STRT: SETZM ALL
STRTA: RESET
SETZM XDIST
SETZM INUSE
SETZM NINUSE
SETZM DIST
SETZM NFREE#
SETZM NUSE#
MOVE A,[DIST,,DIST+1]
BLT A,DIST+177
MOVEI P,PDL
MOVEI A,37
PEEK A,
MOVEM A,MEMSIZ#
HRLZS A
TLZ A,401776
SETPR2 A,
JRST NOSETP
MOVEI A,266
PEEK A,
MOVEM A,CORTAB# ;SYSTEM ADDRESS OF CORTAB
SETZM INUSE#
SETZM NINUSE#
INIT 0,0
'LPT '
HEAD,,0
JRST NOLPT
SETZM NAME+3
SETZM NAME+2
HLLZS NAME+1
ENTER NAME
JRST [ OUTSTR [ASCIZ /ENTER FAILED!
/]
HALT STRTA ]
OUTBUF 0,2
MOVE R,[POINT 7,[ASCIZ /LOC IN USE FREE
/]]
SKIPN ALL
PUSHJ P,PUTSTR
MOVE Z,400263 ;GET ADDRESS OF MEMSIZ
MOVE Z,400000(Z) ;GET MEMSIZ
MOVE A,[400000(Z)]
MOVEM A,SYSLOC#
MOVE A,MEMSIZ
CAIG A,377777
JRST LOOP
CAIE A,777777
JRST [ OUTSTR [ASCIZ /CAN'T MAP TO IT!
/]
HALT STRT ]
MOVE A,[376001,,400000]
SETPR2 ,
JRST NOSET
MOVNI A,400000(A)
HRRM A,SYSLOC
LOOP: SKIPE ALL ;Z contains low address of an fs block
JRST NOLOC
HRRZ B,Z
PUSHJ P,OCTPNT ;print address
MOVEI S,11
PUSHJ P,PUTOUT
NOLOC: MOVEM Z,LAST# ;last address processed
TRNE Z,777 ;crossing a PAGE boundary?
JRST NOTK ;no.
MOVEI B,(Z) ;GET address (on a PAGE boundary)
LSH B,-=9 ;shift
ADD B,CORTAB
PEEK B, ;Cortab word from system
LDB B,[POINT 9,B,26] ;Select appropriate byte
CAIN B,105 ;105 is the normal fs byte
JRST NOTK ;if normal, we avoid the rest of this.
CAIE B,110 ;SPECIAL CODE FOR PAGE MAPS
JRST INCONS
IORI Z,777 ;ADVANCE TO END OF THIS BLOCK
MOVEI B,1000 ;SIZE OF BLOCK
ADDM B,INUSE ;COUNT AS IN USE
SKIPN ALL
PUSHJ P,OCTPNT ;PRINT BLOCK SIZE (IN USE)
AOS NUSE ;count blocks that are in use
AOS XDIST ;NUMBER OF PAGES IN USE AS PAGE MAPS
SKIPE ALL
JRST DONE ;done if not printing
MOVE R,[POINT 7,[ASCIZ/ PAGE MAP BLOCK. /]]
PUSHJ P,PUTSTR
JRST DONE
NOTK: HRRZ Z,@SYSLOC ;pointer to highest word in this block
CAMLE Z,LAST ;high address should exceed low address
CAMLE Z,MEMSIZ ;but be smaller than size of real memory
JRST INCONS
HLRZ B,@SYSLOC
TRZ B,400000 ;clear the "IN USE" bit, leaving size
MOVEI S,11
SKIPN ALL
SKIPG @SYSLOC
CAIA
PUSHJ P,PUTOUT ;extra tab if block is free
SKIPN ALL
PUSHJ P,OCTPNT ;block size
SKIPG @SYSLOC ;free or in use?
JRST LOCUSE ;in use
AOS NFREE ;count a free block
HLRZ B,@SYSLOC ;get the size again
TRZ B,400000
ADDM B,NINUSE ;count size of Not IN USE
MOVSI C,1
CAIL B,200
MOVEI B,0
ADDM C,DIST(B) ;count distribution of sizes
JRST DONE
LOCUSE: AOS NUSE ;count blocks that are in use
HLRZ B,@SYSLOC
TRZ B,400000
ADDM B,INUSE ;increase count of amount IN USE
CAIL B,200
MOVEI B,0
AOS DIST(B)
SKIPE ALL
JRST DONE ;done if not printing
HLRZ B,@SYSLOC
TRZ B,400000
LSH B,-3 ;size/8
CAIG B,NAMLEN
SKIPN R,NAMTAB-1(B)
JRST DONE ;done if there's no name for this size
HRLI R,(<POINT 7,0>)
PUSHJ P,PUTSTR
DONE: MOVE R,[POINT 7,CRLF]
SKIPN ALL
PUSHJ P,PUTSTR
CAMGE Z,MEMSIZ ;done yet?
AOJA Z,LOOP ;no. advance to low end of next block
MOVE R,[POINT 7,CRLF]
PUSHJ P,PUTSTR
MOVE R,[POINT 7,CRLF]
PUSHJ P,PUTSTR
MOVE B,INUSE
PUSHJ P,OCTPNT
MOVE R,[POINT 7,[ASCIZ / TOTAL WORDS IN USE.
/]]
PUSHJ P,PUTSTR
MOVE B,NINUSE
PUSHJ P,OCTPNT
MOVE R,[POINT 7,[ASCIZ / TOTAL WORDS FREE.
(USED) (FREE)
SIZE NUMBER NUMBER
/]]
PUSHJ P,PUTSTR
MOVEI D,1
LOOP2: SKIPN DIST(D)
JRST DONE1
MOVEI B,(D)
PUSHJ P,OCTPNT
MOVEI S,11
PUSHJ P,PUTOUT
HRRZ B,DIST(D)
PUSHJ P,OCTPNT
MOVEI S,11
PUSHJ P,PUTOUT
HLRZ B,DIST(D)
PUSHJ P,OCTPNT
MOVEI S,11
PUSHJ P,PUTOUT
HRRZ B,DIST(D)
IMULI B,(D)
PUSHJ P,DPT
MOVEI B,(D)
LSH B,-3
CAIG B,NAMLEN
SKIPN R,NAMTAB-1(B)
JRST NONAM
HRLI R,(<POINT 7,,6>)
PUSHJ P,PUTSTR
NONAM: MOVE R,[POINT 7,CRLF]
PUSHJ P,PUTSTR
DONE1: CAIGE D,177
AOJA D,LOOP2
MOVE R,[POINT 7,[ASCIZ /≥ 200 /]]
PUSHJ P,PUTSTR
HRRZ B,DIST
PUSHJ P,OCTPNT
MOVEI S,11
PUSHJ P,PUTOUT
HLRZ B,DIST
PUSHJ P,OCTPNT
MOVE R,[POINT 7,CRLF]
PUSHJ P,PUTSTR
MOVE B,XDIST ;NUMBER OF PAGES USED
PUSHJ P,DP1
MOVE R,[POINT 7,[ASCIZ / page maps.
/]]
PUSHJ P,PUTSTR
MOVE R,[POINT 7,CRLF]
PUSHJ P,PUTSTR
MOVE B,NFREE
PUSHJ P,OCTPNT
MOVE R,[POINT 7,[ASCIZ / FREE BLOCKS.
/]]
PUSHJ P,PUTSTR
MOVE B,NUSE
PUSHJ P,OCTPNT
MOVE R,[POINT 7,[ASCIZ / USED BLOCKS.
/]]
PUSHJ P,PUTSTR
MOVEI Z,247
PEEK Z,
MOVEI B,1(Z) ;NFSGETS
PEEK B,
MOVEI X,2(Z) ;NFSGIVES
PEEK X,
MOVE Y,B
PUSHJ P,OCTPNT
MOVE R,[POINT 7,[ASCIZ / NFSGETS
/]]
PUSHJ P,PUTSTR
MOVE B,X
SUB Y,B
PUSHJ P,OCTPNT
MOVE R,[POINT 7,[ASCIZ / NFSGIVES
/]]
PUSHJ P,PUTSTR
MOVEI B,30(Z)
PEEK B,
SUB Y,B
PUSHJ P,OCTPNT
MOVE R,[POINT 7,[ASCIZ / NFSGFA
/]]
PUSHJ P,PUTSTR
MOVE B,Y
PUSHJ P,OCTPNT
MOVE R,[POINT 7,[ASCIZ / BLOCKS STILL CLAIMED
/]]
PUSHJ P,PUTSTR
MOVEI Z,264
PEEK Z,
MOVSI Y,-17
MOVE R,[POINT 7,[ASCIZ /
REQUEST POPULATIONS:
SIZE COUNT
/]]
PUSHJ P,PUTSTR
RPQLOP: MOVE B,Z
ADDI B,(Y)
PEEK B,
JUMPE B,RPQSKP
PUSH P,B
MOVEI B,1(Y)
LSH B,3
PUSHJ P,OCTPNT ;PRINT OCTAL.
MOVEI S,11
PUSHJ P,PUTOUT
POP P,B
PUSHJ P,OCTPNT
MOVE R,[POINT 7,CRLF]
PUSHJ P,PUTSTR
RPQSKP: AOBJN Y,RPQLOP
EXIT
NAMTAB: [ASCIZ / JOB READ OR WRTINF/] ;0-6
[ASCIZ / DATA DISK QUEUE BLOCK/] ;7-16
[ASCIZ / RUN UUO OR JBTJL/] ;17-26
[ASCIZ / IMP DDB/] ;27-36
[ASCIZ / WHO LINE OR MAIL/] ;37-46
[ASCIZ / IMP MESSAGE BLOCK/] ;47-56
[ASCIZ / PAGE PRINTER BLOCK/] ;57-66
0 ;67-76
[ASCIZ / JBTDTS/] ;77-106
[ASCIZ / DSK DDBS/] ;107-116
[ASCIZ / TTY DDBS OR LINE POINTER TABLE/];117-126
[ASCIZ / JBTPDL/] ;127-136
[ASCIZ / DISPLAY HEADER OR BLK TBL FOR DPYOUT/] ;137-146
0 ;147-156
0 ;157-166
0 ;167-176
[ASCIZ / APRLST - TIMED USER INTERRUPT LIST/] ;177-206
NAMLEN←←.-NAMTAB
DPT: PUSHJ P,DP1
MOVEI S,"."
JRST PUTOUT
DP1: SKIPA C,[=10]
OCTPNT: MOVEI C,10
HRRM C,OCTPN1
OCTPN1: IDIVI B,10
HRLM C,(P)
JUMPE B,.+2
PUSHJ P,OCTPN1
OCTOUT: HLRZ S,(P)
ADDI S,60
PUSHJ P,PUTOUT
POPJ P,
PUTOUT: SOSG HEAD+2
OUT
CAIA
HALT STRTA
IDPB S,HEAD+1
CPOPJ: POPJ P,
PUTSTR: ILDB S,R
JUMPE S,CPOPJ
PUSHJ P,PUTOUT
JRST PUTSTR
LIT↔VAR
NAME: 'FREE '
'LST '
0
0
HEAD: BLOCK 3
PDL: BLOCK 10
XDIST: 0 ;count 1k blocks used as pmaps
DIST: BLOCK 200
CRLF: BYTE(7)15,12
NOSETP:
NOSET: OUTSTR [ASCIZ /SETPR2 FAILURE
/]
EXIT
NOLPT: OUTSTR [ASCIZ /CAN'T INIT THE LPT
/]
EXIT
INCONS: OUTSTR [ASCIZ /FREE STORAGE BLOCKS ARE INCONSISTIENT
/]
EXIT
PNTRS: POINT 9,B,8
POINT 9,B,17
POINT 9,B,26
POINT 9,B,35
END STRT